]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ibusManager: Fix the panel after porting to Promises
authorTing-Wei Lan <lantw@src.gnome.org>
Sun, 3 May 2020 15:26:39 +0000 (23:26 +0800)
committerTing-Wei Lan <lantw@src.gnome.org>
Sun, 3 May 2020 15:26:39 +0000 (23:26 +0800)
Commit 764527c8c9b7659901eb6296a6859ae2b0eabdb8 not only ports this file
to Promises but also changes the behavior of _initPanelService method.
Instead of always calling _updateReadiness when _panelService is ready,
it only calls it when get_global_engine_async succeeds.

The only callers of _updateReadiness are _initEngines and
_initPanelService. Assume that _initEngines completes first. Its
_updateReadiness call keeps _ready as false and it is expected for
_initPanelService to change it to true. However, since
get_global_engine_async fails because there is no active engine,
_initPanelService never calls _updateReadiness. Therefore, all setEngine
calls do nothing because _ready is false, and the input method panel
never shows. Users are unable to use any input method even if they can
see that ibus-daemon is already running.

Fix the issue by changing it back to the old behavior.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1235

js/misc/ibusManager.js

index e8cfead2ce87c05650085de9ae4d0b48f6ddcad2..d9a9a9d602874a1fa3e4e9f56d77feb3db72ab19 100644 (file)
@@ -171,13 +171,13 @@ var IBusManager = class {
             this._panelService.connect('set-content-type', this._setContentType.bind(this));
         } catch (e) {
         }
+        this._updateReadiness();
 
         try {
             // If an engine is already active we need to get its properties
             const engine =
                 await this._ibus.get_global_engine_async(-1, this._cancellable);
             this._engineChanged(this._ibus, engine.get_name());
-            this._updateReadiness();
         } catch (e) {
         }
     }